package tech.aistar.corejava.day16;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;

/**
 * @author success
 * @version 1.0
 * @description:本类用来演示:
 * @date 2019/8/5 0005
 */
public class CountLetterDemo {
    public static void main(String[] args) {
        Path letter = Paths.get("src/tech/aistar/corejava/day16/letter.txt");
        try {
            List<String> lines = Files.readAllLines(letter);

            //定义一个Map集合
            //key - 字母
            //value - 字母出现的次数
            Map<Character,Integer> map = new HashMap<>();

            for (String n : lines) {
                //将字符串转换成字符数组
                char[] arr = n.toCharArray();

                for (int i = 0; i < arr.length; i++) {
                    //判断map集合中是否包含key
                    if(map.containsKey(arr[i])){
                        map.put(arr[i],map.get(arr[i])+1);
                        //int count = map.get(arr[i]);
                        //count++;//count = count + 1;
                        //map.put(arr[i],count);
                    }else{
                        map.put(arr[i],1);
                    }
                }
            }

//            map.forEach(new BiConsumer<Character, Integer>() {
//                @Override
//                public void accept(Character character, Integer integer) {
//                    System.out.println(character+"->"+integer);
//                }
//            });



            //加个要求 - 根据出现的次数降序排
            //如果次数一样,继续根据字母进行降序排

            //定义一个集合,用来封装Entry<Character,Integer> - 目的是为了排序
            //Entry<Character,Integer> entry = map.entrySet();
            List<Map.Entry<Character,Integer>> sortList = new ArrayList<>();

            Set<Map.Entry<Character,Integer>> entrySet = map.entrySet();

            Iterator<Map.Entry<Character,Integer>> iter = entrySet.iterator();

            while(iter.hasNext()){
                sortList.add(iter.next());
            }

            //排序 - java.util.Collections
//            Collections.sort(sortList, new Comparator<Map.Entry<Character, Integer>>() {
//                @Override
//                public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
//                    return 0;
//                }
//            });

            Collections.sort(sortList,(o1,o2) -> {
                if(o1.getValue()>o2.getValue())
                    return -1;
                else if(o1.getValue()==o2.getValue())//次数是一样的时候
                    //再继续根据首字母来进行降序排
                    return o2.getKey().compareTo(o1.getKey());
                return 1;
            });

            sortList.forEach(System.out::println);

           // map.forEach((k,v)->{
//                System.out.println(k+"->"+v);
                  //定义一个内置的对象Entry对象,手动封装k,v
//                Map.Entry<Character,Integer> entry = new Map.Entry<Character, Integer>() {
//                    @Override
//                    public Character getKey() {
//                        return null;
//                    }
//
//                    @Override
//                    public Integer getValue() {
//                        return null;
//                    }
//
//                    @Override
//                    public Integer setValue(Integer value) {
//                        return null;
//                    }
//                }
          // });

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
